Plotting in R

There are two major sets of tools for creating plots in R, namely the base and ggplot2 facilities. Base graphics come with all R installations, while ggplot2 is a stand-alone package. Note that other plotting facilities do exist (notably lattice), but base and ggplot2 are by far the most popular.

The dataset

For the following examples, we will use a dataset taken from Fair (1977) in Econometrica, entitled “A note on the computation of the tobit estimator”. Improbably, this dataset contains information on extramarital affairs.

library(Ecdat)
Loading required package: Ecfun
Warning: package 'Ecfun' was built under R version 3.1.2
Warning: replacing previous import by 'stringi::%<%' when loading 'Ecfun'
Warning: replacing previous import by 'stringi::%<=%' when loading 'Ecfun'

Attaching package: 'Ecdat'

The following object is masked from 'package:datasets':

    Orange
data(Fair)
ema<-Fair
head(ema)
     sex age    ym child religious education occupation rate nbaffairs
1   male  37 10.00    no         3        18          7    4         0
2 female  27  4.00    no         4        14          6    4         0
3 female  32 15.00   yes         1        12          1    4         0
4   male  57 15.00   yes         5        18          6    5         0
5   male  22  0.75    no         2        17          6    3         0
6 female  32  1.50    no         2        17          5    5         0
str(ema)
'data.frame':   601 obs. of  9 variables:
 $ sex       : Factor w/ 2 levels "female","male": 2 1 1 2 2 1 1 2 1 2 ...
 $ age       : num  37 27 32 57 22 32 22 57 32 22 ...
 $ ym        : num  10 4 15 15 0.75 1.5 0.75 15 15 1.5 ...
 $ child     : Factor w/ 2 levels "no","yes": 1 1 2 2 1 1 1 2 2 1 ...
 $ religious : int  3 4 1 5 2 2 2 2 4 4 ...
 $ education : num  18 14 12 18 17 17 12 14 16 14 ...
 $ occupation: int  7 6 1 6 6 5 1 4 1 4 ...
 $ rate      : int  4 4 4 5 3 5 3 4 2 5 ...
 $ nbaffairs : num  0 0 0 0 0 0 0 0 0 0 ...
library(plyr)
ema<-ddply(.data = ema, .variables = "age", .fun = transform, avg.nbaffairs=mean(nbaffairs, na.rm=T))

base

  • Minimal call takes the following form
plot(x=)
# Note that when asked to plot a single vector, R will assume the index positions of each vector element are the implied horizontal dimension
plot(x = ema$age) 

  • Basic call takes the following form
plot(x=, y=)
plot(x = ema$age, y = ema$avg.nbaffairs)

base/type (scatter, line, both)

  • The “type” argument accepts the following character indicators
  • “p” – point/scatter plots (default plotting behavior)
plot(x=ema$age, y=ema$avg.nbaffairs, type="p")

 * “l” – line graphs

# Note that "line" does not create a smoothing line, just connected points
plot(x=ema$age, y=ema$avg.nbaffairs, type="l") 

 * “b” – both line and point plots

plot(x=ema$age, y=ema$avg.nbaffairs, type="b") 

base/type (histograms, density plots)

  • Certain plot types require different calls outside of the “type” argument
  • Ex) Histograms
hist(x=ema$age)

hist(x=ema$age, breaks=5)

hist(x=ema$age, breaks=10)

 * Ex) Density plots

age.density<-density(x=ema$age, na.rm=T) # Create a density object (NOTE: be sure to remove missing values)
class(age.density) # Check the class of the object
[1] "density"
age.density # View the contents of the object

Call:
    density.default(x = ema$age, na.rm = T)

Data: ema$age (601 obs.);   Bandwidth 'bw' = 1.868

       x               y            
 Min.   :11.90   Min.   :2.406e-05  
 1st Qu.:24.57   1st Qu.:6.520e-03  
 Median :37.25   Median :1.226e-02  
 Mean   :37.25   Mean   :1.970e-02  
 3rd Qu.:49.93   3rd Qu.:3.485e-02  
 Max.   :62.60   Max.   :5.663e-02  
plot(x=age.density) # Plot the density object

plot(x=density(x=ema$age, bw=.5, na.rm=T)) # Plot the density object, bandwidth of 0.5

plot(x=density(x=ema$age, bw=2, na.rm=T)) # Plot the density object, bandwidth of 2

plot(x=density(x=ema$age, bw=6, na.rm=T)) # Plot the density object, bandwidth of 6

base/options [labeling]

  • Basic call with popular labeling arguments
plot(x=, y=, type="", xlab="", ylab="", main="") 
  • From the previous example
plot(x=ema$age, y=ema$avg.nbaffairs, type="l", xlab="Age (Years)", ylab="Number of Affairs (per 12 months)", main="Annual Extramarital Affairs by Age") # Add labels for axes and overall plot

base/options [axis + size scaling]

  • Basic call with popular scaling arguments
plot(x=, y=, type="", xlim=, ylim=, cex=)
  • From the previous example
plot(x=ema$age, y=ema$avg.nbaffairs, type="p") # Create a basic plot

# Limit the ages (x-axis) to between 20 and 40
plot(x=ema$age, y=ema$avg.nbaffairs, type="p", xlim = c(20,40)) 

# Limit the ages (x-axis) to between 20 and 40, increase point size to 2
plot(x=ema$age, y=ema$avg.nbaffairs, type="p", xlim = c(20,40), cex=2) 

# Limit the ages (x-axis) to between 20 and 40, decrease point size to 0.5
plot(x=ema$age, y=ema$avg.nbaffairs, type="p", xlim = c(20,40), cex=0.5)  

base/options [graphical parameters]

  • Basic call with popular scaling arguments
plot(x=, y=, type="", col="", pch=, lty=, lwd=)
  • Colors
colors() # View all elements of the color vector
  [1] "white"                "aliceblue"            "antiquewhite"        
  [4] "antiquewhite1"        "antiquewhite2"        "antiquewhite3"       
  [7] "antiquewhite4"        "aquamarine"           "aquamarine1"         
 [10] "aquamarine2"          "aquamarine3"          "aquamarine4"         
 [13] "azure"                "azure1"               "azure2"              
 [16] "azure3"               "azure4"               "beige"               
 [19] "bisque"               "bisque1"              "bisque2"             
 [22] "bisque3"              "bisque4"              "black"               
 [25] "blanchedalmond"       "blue"                 "blue1"               
 [28] "blue2"                "blue3"                "blue4"               
 [31] "blueviolet"           "brown"                "brown1"              
 [34] "brown2"               "brown3"               "brown4"              
 [37] "burlywood"            "burlywood1"           "burlywood2"          
 [40] "burlywood3"           "burlywood4"           "cadetblue"           
 [43] "cadetblue1"           "cadetblue2"           "cadetblue3"          
 [46] "cadetblue4"           "chartreuse"           "chartreuse1"         
 [49] "chartreuse2"          "chartreuse3"          "chartreuse4"         
 [52] "chocolate"            "chocolate1"           "chocolate2"          
 [55] "chocolate3"           "chocolate4"           "coral"               
 [58] "coral1"               "coral2"               "coral3"              
 [61] "coral4"               "cornflowerblue"       "cornsilk"            
 [64] "cornsilk1"            "cornsilk2"            "cornsilk3"           
 [67] "cornsilk4"            "cyan"                 "cyan1"               
 [70] "cyan2"                "cyan3"                "cyan4"               
 [73] "darkblue"             "darkcyan"             "darkgoldenrod"       
 [76] "darkgoldenrod1"       "darkgoldenrod2"       "darkgoldenrod3"      
 [79] "darkgoldenrod4"       "darkgray"             "darkgreen"           
 [82] "darkgrey"             "darkkhaki"            "darkmagenta"         
 [85] "darkolivegreen"       "darkolivegreen1"      "darkolivegreen2"     
 [88] "darkolivegreen3"      "darkolivegreen4"      "darkorange"          
 [91] "darkorange1"          "darkorange2"          "darkorange3"         
 [94] "darkorange4"          "darkorchid"           "darkorchid1"         
 [97] "darkorchid2"          "darkorchid3"          "darkorchid4"         
[100] "darkred"              "darksalmon"           "darkseagreen"        
[103] "darkseagreen1"        "darkseagreen2"        "darkseagreen3"       
[106] "darkseagreen4"        "darkslateblue"        "darkslategray"       
[109] "darkslategray1"       "darkslategray2"       "darkslategray3"      
[112] "darkslategray4"       "darkslategrey"        "darkturquoise"       
[115] "darkviolet"           "deeppink"             "deeppink1"           
[118] "deeppink2"            "deeppink3"            "deeppink4"           
[121] "deepskyblue"          "deepskyblue1"         "deepskyblue2"        
[124] "deepskyblue3"         "deepskyblue4"         "dimgray"             
[127] "dimgrey"              "dodgerblue"           "dodgerblue1"         
[130] "dodgerblue2"          "dodgerblue3"          "dodgerblue4"         
[133] "firebrick"            "firebrick1"           "firebrick2"          
[136] "firebrick3"           "firebrick4"           "floralwhite"         
[139] "forestgreen"          "gainsboro"            "ghostwhite"          
[142] "gold"                 "gold1"                "gold2"               
[145] "gold3"                "gold4"                "goldenrod"           
[148] "goldenrod1"           "goldenrod2"           "goldenrod3"          
[151] "goldenrod4"           "gray"                 "gray0"               
[154] "gray1"                "gray2"                "gray3"               
[157] "gray4"                "gray5"                "gray6"               
[160] "gray7"                "gray8"                "gray9"               
[163] "gray10"               "gray11"               "gray12"              
[166] "gray13"               "gray14"               "gray15"              
[169] "gray16"               "gray17"               "gray18"              
[172] "gray19"               "gray20"               "gray21"              
[175] "gray22"               "gray23"               "gray24"              
[178] "gray25"               "gray26"               "gray27"              
[181] "gray28"               "gray29"               "gray30"              
[184] "gray31"               "gray32"               "gray33"              
[187] "gray34"               "gray35"               "gray36"              
[190] "gray37"               "gray38"               "gray39"              
[193] "gray40"               "gray41"               "gray42"              
[196] "gray43"               "gray44"               "gray45"              
[199] "gray46"               "gray47"               "gray48"              
[202] "gray49"               "gray50"               "gray51"              
[205] "gray52"               "gray53"               "gray54"              
[208] "gray55"               "gray56"               "gray57"              
[211] "gray58"               "gray59"               "gray60"              
[214] "gray61"               "gray62"               "gray63"              
[217] "gray64"               "gray65"               "gray66"              
[220] "gray67"               "gray68"               "gray69"              
[223] "gray70"               "gray71"               "gray72"              
[226] "gray73"               "gray74"               "gray75"              
[229] "gray76"               "gray77"               "gray78"              
[232] "gray79"               "gray80"               "gray81"              
[235] "gray82"               "gray83"               "gray84"              
[238] "gray85"               "gray86"               "gray87"              
[241] "gray88"               "gray89"               "gray90"              
[244] "gray91"               "gray92"               "gray93"              
[247] "gray94"               "gray95"               "gray96"              
[250] "gray97"               "gray98"               "gray99"              
[253] "gray100"              "green"                "green1"              
[256] "green2"               "green3"               "green4"              
[259] "greenyellow"          "grey"                 "grey0"               
[262] "grey1"                "grey2"                "grey3"               
[265] "grey4"                "grey5"                "grey6"               
[268] "grey7"                "grey8"                "grey9"               
[271] "grey10"               "grey11"               "grey12"              
[274] "grey13"               "grey14"               "grey15"              
[277] "grey16"               "grey17"               "grey18"              
[280] "grey19"               "grey20"               "grey21"              
[283] "grey22"               "grey23"               "grey24"              
[286] "grey25"               "grey26"               "grey27"              
[289] "grey28"               "grey29"               "grey30"              
[292] "grey31"               "grey32"               "grey33"              
[295] "grey34"               "grey35"               "grey36"              
[298] "grey37"               "grey38"               "grey39"              
[301] "grey40"               "grey41"               "grey42"              
[304] "grey43"               "grey44"               "grey45"              
[307] "grey46"               "grey47"               "grey48"              
[310] "grey49"               "grey50"               "grey51"              
[313] "grey52"               "grey53"               "grey54"              
[316] "grey55"               "grey56"               "grey57"              
[319] "grey58"               "grey59"               "grey60"              
[322] "grey61"               "grey62"               "grey63"              
[325] "grey64"               "grey65"               "grey66"              
[328] "grey67"               "grey68"               "grey69"              
[331] "grey70"               "grey71"               "grey72"              
[334] "grey73"               "grey74"               "grey75"              
[337] "grey76"               "grey77"               "grey78"              
[340] "grey79"               "grey80"               "grey81"              
[343] "grey82"               "grey83"               "grey84"              
[346] "grey85"               "grey86"               "grey87"              
[349] "grey88"               "grey89"               "grey90"              
[352] "grey91"               "grey92"               "grey93"              
[355] "grey94"               "grey95"               "grey96"              
[358] "grey97"               "grey98"               "grey99"              
[361] "grey100"              "honeydew"             "honeydew1"           
[364] "honeydew2"            "honeydew3"            "honeydew4"           
[367] "hotpink"              "hotpink1"             "hotpink2"            
[370] "hotpink3"             "hotpink4"             "indianred"           
[373] "indianred1"           "indianred2"           "indianred3"          
[376] "indianred4"           "ivory"                "ivory1"              
[379] "ivory2"               "ivory3"               "ivory4"              
[382] "khaki"                "khaki1"               "khaki2"              
[385] "khaki3"               "khaki4"               "lavender"            
[388] "lavenderblush"        "lavenderblush1"       "lavenderblush2"      
[391] "lavenderblush3"       "lavenderblush4"       "lawngreen"           
[394] "lemonchiffon"         "lemonchiffon1"        "lemonchiffon2"       
[397] "lemonchiffon3"        "lemonchiffon4"        "lightblue"           
[400] "lightblue1"           "lightblue2"           "lightblue3"          
[403] "lightblue4"           "lightcoral"           "lightcyan"           
[406] "lightcyan1"           "lightcyan2"           "lightcyan3"          
[409] "lightcyan4"           "lightgoldenrod"       "lightgoldenrod1"     
[412] "lightgoldenrod2"      "lightgoldenrod3"      "lightgoldenrod4"     
[415] "lightgoldenrodyellow" "lightgray"            "lightgreen"          
[418] "lightgrey"            "lightpink"            "lightpink1"          
[421] "lightpink2"           "lightpink3"           "lightpink4"          
[424] "lightsalmon"          "lightsalmon1"         "lightsalmon2"        
[427] "lightsalmon3"         "lightsalmon4"         "lightseagreen"       
[430] "lightskyblue"         "lightskyblue1"        "lightskyblue2"       
[433] "lightskyblue3"        "lightskyblue4"        "lightslateblue"      
[436] "lightslategray"       "lightslategrey"       "lightsteelblue"      
[439] "lightsteelblue1"      "lightsteelblue2"      "lightsteelblue3"     
[442] "lightsteelblue4"      "lightyellow"          "lightyellow1"        
[445] "lightyellow2"         "lightyellow3"         "lightyellow4"        
[448] "limegreen"            "linen"                "magenta"             
[451] "magenta1"             "magenta2"             "magenta3"            
[454] "magenta4"             "maroon"               "maroon1"             
[457] "maroon2"              "maroon3"              "maroon4"             
[460] "mediumaquamarine"     "mediumblue"           "mediumorchid"        
[463] "mediumorchid1"        "mediumorchid2"        "mediumorchid3"       
[466] "mediumorchid4"        "mediumpurple"         "mediumpurple1"       
[469] "mediumpurple2"        "mediumpurple3"        "mediumpurple4"       
[472] "mediumseagreen"       "mediumslateblue"      "mediumspringgreen"   
[475] "mediumturquoise"      "mediumvioletred"      "midnightblue"        
[478] "mintcream"            "mistyrose"            "mistyrose1"          
[481] "mistyrose2"           "mistyrose3"           "mistyrose4"          
[484] "moccasin"             "navajowhite"          "navajowhite1"        
[487] "navajowhite2"         "navajowhite3"         "navajowhite4"        
[490] "navy"                 "navyblue"             "oldlace"             
[493] "olivedrab"            "olivedrab1"           "olivedrab2"          
[496] "olivedrab3"           "olivedrab4"           "orange"              
[499] "orange1"              "orange2"              "orange3"             
[502] "orange4"              "orangered"            "orangered1"          
[505] "orangered2"           "orangered3"           "orangered4"          
[508] "orchid"               "orchid1"              "orchid2"             
[511] "orchid3"              "orchid4"              "palegoldenrod"       
[514] "palegreen"            "palegreen1"           "palegreen2"          
[517] "palegreen3"           "palegreen4"           "paleturquoise"       
[520] "paleturquoise1"       "paleturquoise2"       "paleturquoise3"      
[523] "paleturquoise4"       "palevioletred"        "palevioletred1"      
[526] "palevioletred2"       "palevioletred3"       "palevioletred4"      
[529] "papayawhip"           "peachpuff"            "peachpuff1"          
[532] "peachpuff2"           "peachpuff3"           "peachpuff4"          
[535] "peru"                 "pink"                 "pink1"               
[538] "pink2"                "pink3"                "pink4"               
[541] "plum"                 "plum1"                "plum2"               
[544] "plum3"                "plum4"                "powderblue"          
[547] "purple"               "purple1"              "purple2"             
[550] "purple3"              "purple4"              "red"                 
[553] "red1"                 "red2"                 "red3"                
[556] "red4"                 "rosybrown"            "rosybrown1"          
[559] "rosybrown2"           "rosybrown3"           "rosybrown4"          
[562] "royalblue"            "royalblue1"           "royalblue2"          
[565] "royalblue3"           "royalblue4"           "saddlebrown"         
[568] "salmon"               "salmon1"              "salmon2"             
[571] "salmon3"              "salmon4"              "sandybrown"          
[574] "seagreen"             "seagreen1"            "seagreen2"           
[577] "seagreen3"            "seagreen4"            "seashell"            
[580] "seashell1"            "seashell2"            "seashell3"           
[583] "seashell4"            "sienna"               "sienna1"             
[586] "sienna2"              "sienna3"              "sienna4"             
[589] "skyblue"              "skyblue1"             "skyblue2"            
[592] "skyblue3"             "skyblue4"             "slateblue"           
[595] "slateblue1"           "slateblue2"           "slateblue3"          
[598] "slateblue4"           "slategray"            "slategray1"          
[601] "slategray2"           "slategray3"           "slategray4"          
[604] "slategrey"            "snow"                 "snow1"               
[607] "snow2"                "snow3"                "snow4"               
[610] "springgreen"          "springgreen1"         "springgreen2"        
[613] "springgreen3"         "springgreen4"         "steelblue"           
[616] "steelblue1"           "steelblue2"           "steelblue3"          
[619] "steelblue4"           "tan"                  "tan1"                
[622] "tan2"                 "tan3"                 "tan4"                
[625] "thistle"              "thistle1"             "thistle2"            
[628] "thistle3"             "thistle4"             "tomato"              
[631] "tomato1"              "tomato2"              "tomato3"             
[634] "tomato4"              "turquoise"            "turquoise1"          
[637] "turquoise2"           "turquoise3"           "turquoise4"          
[640] "violet"               "violetred"            "violetred1"          
[643] "violetred2"           "violetred3"           "violetred4"          
[646] "wheat"                "wheat1"               "wheat2"              
[649] "wheat3"               "wheat4"               "whitesmoke"          
[652] "yellow"               "yellow1"              "yellow2"             
[655] "yellow3"              "yellow4"              "yellowgreen"         
colors()[179] # View specific element of the color vector
[1] "gray26"

Another option: R Color Infographic

plot(x=ema$age, y=ema$avg.nbaffairs, type="l", col=colors()[145]) # or col="gold3"

plot(x=ema$age, y=ema$avg.nbaffairs, type="l", col="seagreen4") # or col=colors()[578]

  • Point Styles and Widths

A Good Reference

plot(x=ema$age, y=ema$avg.nbaffairs, type="p", pch=3) # Change point style to crosses

plot(x=ema$age, y=ema$avg.nbaffairs, type="p", pch=15) # Change point style to filled squares

# Change point style to filled squares and increase point size to 3
plot(x=ema$age, y=ema$avg.nbaffairs, type="p", pch=15, cex=3) 

plot(x=ema$age, y=ema$avg.nbaffairs, pch="w") # Change point style to "w"

# Change point style to "$" and increase point size to 2
plot(x=ema$age, y=ema$avg.nbaffairs, type="p", pch="$", cex=2) 

  • Line Styles and Widths
# Line plot with solid line
plot(x=ema$age, y=ema$avg.nbaffairs, type="l", lty=1)

# Line plot with medium dashed line
plot(x=ema$age, y=ema$avg.nbaffairs, type="l", lty=2)

# Line plot with short dashed line
plot(x=ema$age, y=ema$avg.nbaffairs, type="l", lty=3)

# Change line width to 2
plot(x=ema$age, y=ema$avg.nbaffairs, type="l", lty=3, lwd=2)

# Change line width to 5
plot(x=ema$age, y=ema$avg.nbaffairs, type="l", lty=3, lwd=5)

# Change line width to 10 and use dash-dot
plot(x=ema$age, y=ema$avg.nbaffairs, type="l", lty=4, lwd=10)

base/options [annotations/reference lines/legends]

  • Text
plot(x=ema$age, y=ema$avg.nbaffairs, type="l", lty=4, lwd=10)
text(x=25, y=3, labels="Sharp Drop", cex = .75)

  • Reference Lines
plot(x=ema$age, y=ema$avg.nbaffairs, type="l", lty=4, lwd=10)
abline(v=42.5, h=2.25, lty=2)

ggplot2

The general call for ggplot2 takes on one of three forms:

# 1) Aesthetics/options are specified the initial ggplot() layer and will be used by all other layers
ggplot(data=, aes(x=,y=), color=, size=,)+geom_xxxx()+geom_yyyy()

# 2) Aesthetics/options are not specified the initial ggplot() layer, but in other layers
ggplot()+geom_xxxx(data=, aes(x=,y=), color=, size=,)+geom_yyyy(data=, aes(x=,y=), color=, size=,)

# 3) Aesthetics/options are specified partially in the ggplot() layers and partially in other layers  
ggplot(data=, aes(x=,y=), color=, size=,)+geom_xxxx()+geom_yyyy(data=, aes(x=,y=), color=, size=,)

In general (but with some exceptions), aesthetics/options specified in the ggplot() layer will override aesthetics/options specified in other layers and will be the source for required argument values not present in those layers.

Density plots

library(ggplot2)

Attaching package: 'ggplot2'

The following object is masked _by_ '.GlobalEnv':

    mpg
ggplot(data=ema, aes(x=age))+geom_density()

ggplot()+geom_density(data=ema, aes(x=age))

ggplot(data=ema)+geom_density(aes(x=age))

ggplot(data=ema, aes(x=age))+geom_line(stat="density") # Trick for removing coverage line

ggplot(data=ema, aes(x=age))+geom_line(stat="density")+theme_bw() # Trick for removing background shading

X-Y scatter plots

ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_point()+theme_bw()

X-Y line plots

ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_line()+theme_bw()

bar plots

ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_bar(stat="identity")+theme_bw()

box plots

ggplot(data=ema, aes(x=sex,y = nbaffairs))+geom_boxplot()+theme_bw()

ggplot(data=ema, aes(x=child,y = nbaffairs))+geom_boxplot()+theme_bw()

ggplot(data=ema, aes(x=factor(religious),y = nbaffairs))+geom_boxplot()+theme_bw()

ggplot(data=ema, aes(x=factor(rate),y = nbaffairs))+geom_boxplot()+theme_bw()

“trellis” plots

ggplot(data=ema, aes(x=factor(rate),y = nbaffairs))+geom_boxplot()+theme_bw()+facet_wrap(facets = ~sex)

ggplot(data=ema, aes(x=sex,y = nbaffairs))+geom_boxplot()+theme_bw()+facet_wrap(facets = ~rate+child)

options [labeling]

ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_line()+theme_bw()

ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_line()+theme_bw()+
  xlab("Age (Years)")+ylab("Number of Affairs (per 12 months)")+
  ggtitle("Annual Extramarital Affairs by Age")

options [axis + size scaling]

ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_point()+theme_bw()+
  xlim(20,40)

ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_point(size=.5)+theme_bw()+
  xlim(20,40)

ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_point(size=10)+theme_bw()+
  xlim(20,40)

ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_line()+theme_bw()+
  xlim(20,40)

ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_line(size=.1)+theme_bw()+
  xlim(20,40)

ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_line(size=3)+theme_bw()+
  xlim(20,40)

options [graphical parameters]

  • Colors
ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_line(color="red")+theme_bw()

ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_line(color="seagreen4")+theme_bw()

  • Point Styles and Widths
ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_point(shape=3)+theme_bw()

ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_point(shape=15)+theme_bw()

ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_point(shape="@", size=10)+theme_bw()

  • Line Styles and Widths
ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_line(linetype=2)+theme_bw()

ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_line(linetype=4)+theme_bw()

ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_line(linetype=2, size=.5)+theme_bw()

ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_line(linetype=4, size=10)+theme_bw()

Anatomy of aes()

ggplot2 tries to represent variation in data by making use of various “aesthetics”. This general approach is based on The Grammar of Graphics, which says that visualizing data requires four elements:

  1. One or more statistics conveying information about the data (identities, means, medians, etc.)

  2. A coordinate system that differentiates between the intersections of statistics (at most two for ggplot, three for lattice)

  3. Geometries that differentiate between off-coordinate variation in kind

  4. Scales that differentiate between off-coordinate variation in degree

All of these elements can be manipulated to display variation in the data via the aes() function.

ggplot(data=, aes(x=, y=, color=, linetype=, shape=, size=))

Normally, specifying options like color="red" or size=10 for a given layer results in its contents being red and quite large. Inside the aes() function, however, these arguments are given entire variables whose values will then be displayed using different realizations of that aesthetic.

# Compute average number of affairs by sex
ema<-ddply(.data = ema, .variables = c("age", "sex"), .fun = transform, 
           avg.nbaffairs.age.sex=mean(nbaffairs, na.rm=T))
# Differences in kind using color
ggplot(data=ema, aes(x=age, y=avg.nbaffairs.age.sex))+geom_line()+theme_bw()

ggplot(data=ema, aes(x=age, y=avg.nbaffairs.age.sex, color=sex))+geom_line()+theme_bw()

ggplot(data=ema, aes(x=age, y=avg.nbaffairs.age.sex, linetype=sex))+geom_line()+theme_bw()

ggplot(data=ema, aes(x=age, y=avg.nbaffairs.age.sex, shape=sex))+geom_point()+theme_bw()

ggplot(data=ema, aes(x=age, y=religious, color=nbaffairs))+geom_jitter()+theme_bw() # Note the use of the jitter layer

ggplot(data=ema, aes(x=age, y=religious, size=nbaffairs))+geom_jitter()+theme_bw() # Note the use of the jitter layer

Fitted lines and curves

ggplot(data=ema, aes(x=age, y=nbaffairs))+geom_point()+theme_bw()

ggplot(data=ema, aes(x=age, y=nbaffairs))+geom_point()+theme_bw()+geom_smooth(method="lm")

ggplot(data=ema, aes(x=age, y=nbaffairs))+geom_point()+theme_bw()+geom_smooth(method="loess")

ggplot(data=ema, aes(x=age, y=nbaffairs))+geom_point()+theme_bw()+geom_smooth(method="loess", span=.5)

ggplot(data=ema, aes(x=age, y=nbaffairs))+geom_point()+theme_bw()+geom_smooth(method="loess", span=.99)

ggplot(data=ema, aes(x=age, y=nbaffairs))+geom_point()+theme_bw()+geom_smooth()

ggplot(data=ema, aes(x=age, y=nbaffairs))+geom_point()+theme_bw()+geom_smooth(se=F)

ggplot(data=ema, aes(x=age, y=nbaffairs))+geom_point()+theme_bw()+geom_smooth(se=F, color="red")

ggplot(data=ema, aes(x=age, y=nbaffairs))+geom_point()+theme_bw()+geom_smooth(aes(color=sex, fill=sex))

Exporting

Two basic image types

  1. Raster/Bitmap (.png, .jpeg)

Every pixel of a plot contains its own separate coding; not so great if you want to resize the image

jpeg(filename="example.png", width=, height=)
plot(x,y)
dev.off()
  1. Vector (.pdf, .ps)

Every element of a plot is encoded with a function that gives its coding conditional on several factors; great for resizing

pdf(filename="example.pdf", width=, height=)
plot(x,y)
dev.off()

Exporting with ggplot

# Assume we saved our plot is an object called example.plot
ggsave(filename="example.pdf", plot=example.plot, scale=, width=, height=)